package com.common.constant;

import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;

import static com.common.constant.ExpPrefixUtil.*;

public enum ExceptionEnum implements Serializable {
    SysException("102", "系统异常", "网络开小差了，请稍候再试！"),
    NEEDTOKEN("105", "用户未登录或者被挤掉了", "请重新登录"),
    TOKEN_EXPIRE("106", "短期token过期", "请重新登录"),
    PARAM_MISSING("110", "参数缺失", "%s不存在"),
    Exception("111", "未知错误", "网络开小差了，请稍后再试"),
    TOKEN_INVALID("122", "无效token", "请重新登录"),
    NO_TOKEN("123", "token被后清掉了", "请重新登录"),
    NEED_PHONE("124", "需要绑定手机号", "需要绑定手机号"),
    ValidateException("2000", "数据验证失败！", "网络开小差了，请稍候再试！"),
    LockException("3000", "分布式锁异常", "网络开小差了，请稍候再试！"),
    BusiException("4000", "业务逻辑异常", "网络开小差了，" +
            "" +
            "请稍候再试！"),
    /**
     * 通用异常
     */
    UNKNOW_ERROR(ComExpPrefix + "000", "未知异常", "未知异常"),
    ERROR_404(ComExpPrefix + "001", "没有该接口", "没有该接口"),
    PARAM_NULL(ComExpPrefix + "002", "参数为空", "参数为空"),
    NO_REPEAT(ComExpPrefix + "003", "请勿重复提交", "请勿重复提交"),
    SESSION_NULL(ComExpPrefix + "004", "请求头中SessionId不存在", "请求头中SessionId不存在"),
    HTTP_REQ_METHOD_ERROR(ComExpPrefix + "005", "HTTP请求方法不正确", "HTTP请求方法不正确"),
    JSONERROR(ComExpPrefix + "006", "JSON解析异常", "JSON解析异常"),
    PARAM_NOT_VALID(ComExpPrefix + "007", "无效参数", "无效参数"),

    /**
     * User模块异常
     */
    USERNAME_NULL(UserExpPrefix + "000", "用户名为空", "用户名为空"),
    PASSWD_NULL(UserExpPrefix + "001", "密码为空", "密码为空"),
    AUTH_NULL(UserExpPrefix + "002", "手机、电子邮件、用户名 至少填一个", "手机、电子邮件、用户名 至少填一个"),
    LOGIN_FAIL(UserExpPrefix + "003", "登录失败", "登录失败"),
    UNLOGIN(UserExpPrefix + "004", "尚未登录", "尚未登录"),
    NO_PERMISSION(UserExpPrefix + "005", "没有权限", "没有权限"),
    PHONE_NULL(UserExpPrefix + "006", "手机号为空", "手机号为空"),
    MAIL_NULL(UserExpPrefix + "007", "电子邮件为空", "电子邮件为空"),
    USERTYPE_NULL(UserExpPrefix + "008", "用户类别为空", "用户类别为空"),
    LICENCE_NULL(UserExpPrefix + "009", "营业执照为空", "营业执照为空"),
    COMPANYNAME_NULL(UserExpPrefix + "010", "企业名称为空", "企业名称为空"),
    ROLE_NULL(UserExpPrefix + "011", "角色为空", "角色为空"),
    ROLEID_NULL(UserExpPrefix + "012", "roleId为空", "roleId为空"),
    MENUIDLIST_NULL(UserExpPrefix + "013", "menuIdList为空", "menuIdList为空"),
    PERMISSIONIDLIST_NULL(UserExpPrefix + "014", "permissionIdList为空", "permissionIdList为空"),
    NAME_NULL(UserExpPrefix + "015", "name为空", "name为空"),
    LOCATIONID_NULL(UserExpPrefix + "016", "locationId为空", "locationId为空"),
    LOCATIONUPDATEREQ_NULL(UserExpPrefix + "017", "LocationUpdateReq为空", "LocationUpdateReq为空"),
    UNIONID_NULL(UserExpPrefix + "018", "第三方unionid为空", "第三方unionid为空"),
    PHONE_EXIST(UserExpPrefix + "019", "手机号已经注册了", "手机号已经注册了"),
    USERNAME_EXIST(UserExpPrefix + "020", "用户名已存在", "用户名已存在"),
    PWD_ERROR(UserExpPrefix + "021", "手机号或密码错误", "手机号或密码错误"),
    PHONE_FORMAT_ERROR(UserExpPrefix + "022", "手机号格式错误", "手机号格式错误"),
    PHONE_ERROR(UserExpPrefix + "023", "所填手机号与系统预留手机号不一致", "所填手机号与系统预留手机号不一致"),
    PHONE_BIND(UserExpPrefix + "024", "此用户已经绑定过手机号了", "此用户已经绑定过手机号了"),
    UNIONID_EXIST(UserExpPrefix + "025", "第三方用户已经存在", "第三方用户已经存在"),
    UNIONID_PHONE_EXIST(UserExpPrefix + "026", "第三方用户已经绑定手机号", "第三方用户已经绑定手机号"),
    UNIONID_BIND(UserExpPrefix + "027", "此用户已经绑定过微信了", "此用户已经绑定过微信了"),


    /**
     * Product模块异常
     */
    PRODUCT_NAME_NULL(ProdExpPrefix + "000", "产品名称为空", "产品名称为空"),
    PRODUCT_MARKETPRICE_NULL(ProdExpPrefix + "001", "产品市场价为空", "产品市场价为空"),
    PRODUCT_SHOPPRICE_NULL(ProdExpPrefix + "002", "产品本店价为空", "产品本店价为空"),
    PRODUCT_STOCK_ZERO(ProdExpPrefix + "003", "产品库存为0", "产品库存为0"),
    PRODUCT_WEIGHT_NULL(ProdExpPrefix + "004", "产品重量为空", "产品重量为空"),
    PRODUCT_TOPCATEENTITY_NULL(ProdExpPrefix + "005", "产品一级分类为空", "产品一级分类为空"),
    PRODUCT_SUBCATEGENTITY_NULL(ProdExpPrefix + "006", "产品二级分类为空", "产品二级分类为空"),
    PRODUCT_BRANDENTITY_NULL(ProdExpPrefix + "007", "产品品牌为空", "产品品牌为空"),
    PRODUCT_COMPANYENTITY_NULL(ProdExpPrefix + "008", "产品所属企业为空", "产品所属企业为空"),
    PRODUCT_CREATE_FAIL(ProdExpPrefix + "009", "产品新增失败", "产品新增失败"),
    PRODUCT_UPDATE_FAIL(ProdExpPrefix + "010", "产品更新失败", "产品更新失败"),
    PRODUCT_SELECT_FAIL(ProdExpPrefix + "011", "没有符合条件的查询结果，产品查询失败", "没有符合条件的查询结果，产品查询失败"),
    PRODUCT_NO_EXISTENT(ProdExpPrefix + "025", "产品不存在，或者已下架", "产品不存在，或者已下架"),
    /**
     * Category异常 前缀统一使用 ProdExpPrefix
     */
    CATEGORY_NAME_NULL(ProdExpPrefix + "012", "类别名称为空", "类别名称为空"),
    CATEGORY_CREATE_FAIL(ProdExpPrefix + "013", "类别新增失败", "类别新增失败"),
    CATEGORY_DELETE_FAIL(ProdExpPrefix + "014", "类别删除失败", "类别删除失败"),
    CATEGORY_UPDATE_FAIL(ProdExpPrefix + "015", "类别更新失败", "类别更新失败"),
    CATEGORY_SELECT_FAIL(ProdExpPrefix + "016", "没有符合条件的查询结果，类别查询失败", "没有符合条件的查询结果，类别查询失败"),
    CATEGORY_HASUSED(ProdExpPrefix + "017", "当前类别已经被使用", "当前类别已经被使用"),
    /**
     * Brand异常 前缀统一使用 ProdExpPrefix
     */
    BRADN_NAME_NULL(ProdExpPrefix + "018", "品牌名称为空", "品牌名称为空"),
    BRADN_LOGO_NULL(ProdExpPrefix + "019", "品牌LOGO为空", "品牌LOGO为空"),
    BRADN_COMMPANY_NULL(ProdExpPrefix + "020", "品牌所属企业为空", "品牌所属企业为空"),
    BRADN_CREATE_FAIL(ProdExpPrefix + "021", "品牌查询失败", "品牌查询失败"),
    BRADN_UPDATE_FAIL(ProdExpPrefix + "022", "品牌更新失败", "品牌更新失败"),
    BRADN_DELETE_FAIL(ProdExpPrefix + "023", "品牌删除失败", "品牌删除失败"),
    BRADN_SELETE_FAIL(ProdExpPrefix + "024", "没有符合条件的查询结果，品牌查询失败", "没有符合条件的查询结果，品牌查询失败"),


    /**
     * Order模块异常
     */
    STOCK_LOW(OrderExpPrefix + "000", "库存不足", "库存不足"),
    PROCESSOR_NULL(OrderExpPrefix + "001", "受理请求不存在", "受理请求不存在"),
    COMPONENT_NULL(OrderExpPrefix + "002", "业务组件列表为空", "业务组件列表为空"),
    PROCESSREQ_ENUM_NULL(OrderExpPrefix + "003", "受理请求的枚举为空", "受理请求的枚举为空"),
    PROCESSREQ_NULL(OrderExpPrefix + "004", "受理请求为空", "受理请求为空"),
    PROCESSREQ_ORDERID_NULL(OrderExpPrefix + "005", "受理请求中的orderId为空", "受理请求中的orderId为空"),
    PROCESSREQ_USERID_NULL(OrderExpPrefix + "006", "受理请求中的userId为空", "受理请求中的userId为空"),
    AllowStateList_NULL(OrderExpPrefix + "007", "幂等性检查所需的allowStateList为空", "幂等性检查所需的allowStateList为空"),
    ORDER_INSERT_REQ_NULL(OrderExpPrefix + "008", "创建订单的请求参数为空", "创建订单的请求参数为空"),
    USERID_NULL(OrderExpPrefix + "009", "UserId为空", "UserId为空"),
    PAYMODE_NULL(OrderExpPrefix + "010", "支付方式不能为空，且必须符合枚举规范", "支付方式不能为空，且必须符合枚举规范"),
    LOCATION_NULL(OrderExpPrefix + "011", "收货地址为空", "收货地址为空"),
    PRODUCTIDCOUNT_NULL(OrderExpPrefix + "012", "prodIdCountMap为空", "prodIdCountMap为空"),
    SELLER_DIFFERENT(OrderExpPrefix + "013", "产品的卖家必须相同", "产品的卖家必须相同"),
    TARGETSTATE_NULL(OrderExpPrefix + "014", "更新订单状态时，订单目标状态不能为空", "更新订单状态时，订单目标状态不能为空"),
    PROCESSCONTEXT_NULL(OrderExpPrefix + "015", "订单受理上下文为空", "订单受理上下文为空"),
    PAYMODECODE_ERROR(OrderExpPrefix + "016", "支付方式code不存在", "支付方式code不存在"),
    ORDERQUERYREQ_NULL(OrderExpPrefix + "017", "orderQueryReq为空", "orderQueryReq为空"),
    PRODUCTIDCOUNT_ERROR(OrderExpPrefix + "018", "产品的数量必须大于0", "产品的数量必须大于0"),
    PRODUCT_ID_NO_EXISTENT(OrderExpPrefix + "019", "产品ID不存在", "产品ID不存在"),
    ORDER_NULL(OrderExpPrefix + "020", "查无此单", "查无此单"),
    EXPRESS_NO_NULL(OrderExpPrefix + "021", "物流单号不能为空", "物流单号不能为空"),
    ORDER_STATE_NULL(OrderExpPrefix + "022", "该订单的状态字段为空", "该订单的状态字段为空"),
    ORDER_SOURCE_NULL(OrderExpPrefix + "023", "订单来源为空", "订单来源为空"),
    ORDER_MONEY_NULL(OrderExpPrefix + "024", "订单金额为空", "订单金额为空"),
    ORDER_PAYMENT_TYPE_NULL(OrderExpPrefix + "025", "订单支付方式为空", "订单支付方式为空"),
    ORDER_DETAIL_NULL(OrderExpPrefix + "026", "订单明细为空", "订单明细为空"),
    ORDER_DETAIL_OBJ_ID_NULL(OrderExpPrefix + "027", "订单明细商品编号为空", "订单明细商品编号为空"),
    ORDER_DETAIL_OBJ_NAME_NULL(OrderExpPrefix + "028", "订单明细商品名称为空", "订单明细商品名称为空"),
    ORDER_DETAIL_OBJ_NUM_NULL(OrderExpPrefix + "029", "订单明细商品数量为空", "订单明细商品数量为空"),
    ORDER_DETAIL_OBJ_TYPE_NULL(OrderExpPrefix + "030", "订单明细商品类型为空", "订单明细商品类型为空"),
    ORDER_DETAIL_PRICE_NULL(OrderExpPrefix + "031", "订单明细商品单价为空", "订单明细商品单价为空"),
    ORDER_DETAIL_OBJ_IMG_NULL(OrderExpPrefix + "032", "订单明细商品图片为空", "订单明细商品图片为空"),
    ORDER_ID_NULL(OrderExpPrefix + "033", "订单编号为空", "订单编号为空"),

    /** 首页搜索功能异常 */
    SEARCH_NAME_NULL(SearchExpPrefix + "000", "搜索内容为空", "搜索内容为空"),
    SEARCH_REMOVE_FAIL(SearchExpPrefix + "001", "删除记录失败或无历史记录", "删除记录失败或无历史记录"),


    /**
     * Ablum模块异常
     */
    ALBUM_NAME_NULL(AblumExpPrefix + "000", "专辑名称为空", "专辑名称为空"),
    ALBUM_TOPCATEENTITY_NULL(AblumExpPrefix + "001", "专辑分类为空", "专辑分类为空"),
    ALBUM_BRANDENTITY_NULL(AblumExpPrefix + "002", "专辑功能为空", "专辑功能为空"),
    ALBUM_CREATE_FAIL(AblumExpPrefix + "003", "专辑新增失败", "专辑新增失败"),
    ALBUM_UPDATE_FAIL(AblumExpPrefix + "004", "专辑更新失败", "专辑更新失败"),
    ALBUM_SELECT_FAIL(AblumExpPrefix + "005", "没有符合条件的查询结果", "没有符合条件的查询结果"),
    ALBUM_NO_EXISTENT(AblumExpPrefix + "006", "专辑不存在，或者已下架", "专辑不存在，或者已下架"),
    ALBUM_INFO_NULL(AblumExpPrefix + "007", "专辑简介为空", "专辑简介为空"),
    ALBUM_AUTHOR_NULL(AblumExpPrefix + "008", "专辑作者为空", "专辑作者为空"),
    ALBUM_AUTHOR_ID_NULL(AblumExpPrefix + "009", "专辑作者编号为空", "专辑作者编号为空"),

    /**
     * 系统
     **/
    VERIFYCODE_NULL(SystemExpPrefix + "001", "验证码不能为空", "验证码不能为空"),
    VERIFYCODE_ERROR(SystemExpPrefix + "002", "验证码错误", "验证码错误"),
    VERIFYCODE_OPER_OVER_MAX_TIMES(SystemExpPrefix + "003", "您的操作太过频繁", "您的操作太过频繁"),
    VERIFYCODE_EXPIRE(SystemExpPrefix + "004", "验证码超过有效期", "验证码超过有效期"),
    NOTICE_SETUP_NULL(SystemExpPrefix + "005", "通知开关参数不能为空", "通知开关参数不能为空"),
    CLIENTID_NULL(SystemExpPrefix + "006", "客户端ID不能为空", "客户端编号不能为空"),
    PV_TYPECODE_NOT_EXSIT(SystemExpPrefix + "007", "积分任务编码不存在", "积分任务编码不存在"),
    PV_USER_NOT_EXSIT(SystemExpPrefix + "008", "用户不存在", "用户不存在"),
    PV_TASK_IS_FINISHED(SystemExpPrefix + "009", "今天的积分任务已完成或不能获得积分", "今天的积分任务已完成或不能获得积分"),
    PV_BALANCE_NOT_ENOUGH(SystemExpPrefix + "010", "积分余额不足,无法进行积分消费", "积分余额不足,无法进行积分消费"),
    FEEDBACK_CONTENT_TOO_LONG(SystemExpPrefix + "011", "反馈内容过长", "反馈内容过长"),
    FEEDBACK_TYPE_NOT_EXSIT(SystemExpPrefix + "012", "反馈类型不存在", "反馈类型不存在"),

    /**
     * 用户行为
     **/
    UPLOAD_NULL(UserBehaviourExpPrefix + "001", "上传内容不能为空", "上传内容不能为空"),
    ADD_LIKE_OBJID_NULL(UserBehaviourExpPrefix + "002", "点赞对象objId不能为空", "点赞对象objId不能为空"),
    ADD_LIKE_OBJTYPE_NULL(UserBehaviourExpPrefix + "003", "点赞对象类型objType不能为空", "点赞对象类型objType不能为空"),
    NOTICE_ID_NULL(UserBehaviourExpPrefix + "004", "通知编号noticeId不能为空", "通知编号noticeId不能为空"),
    STORY_ID_NULL(UserBehaviourExpPrefix + "005", "故事编号storyId不能为空", "故事编号storyId不能为空"),
    COMMENT_NULL(UserBehaviourExpPrefix + "006", "评论内容comment不能为空", "评论内容comment不能为空"),
    FANS_ID_NULL(UserBehaviourExpPrefix + "007", "粉丝编号fansId不能为空", "粉丝编号fansId不能为空"),
    COLLECTION_OBJ_ID_NULL(UserBehaviourExpPrefix + "008", "收藏对象编号objId不能为空", "收藏对象编号objId不能为空"),
    COLLECTION_OBJ_TYPE_NULL(UserBehaviourExpPrefix + "009", "收藏对象类型objType不能为空", "收藏对象类型objType不能为空"),
    UPLOAD_ERROR(UserBehaviourExpPrefix + "010", "上传失败", "上传失败"),
    UPLOAD_IMAGE_TOO_LARGE(UserBehaviourExpPrefix + "011", "上传图片过大", "上传图片过大"),


    /**
     * Analysis模块异常
     */
    XXXX_NULL(AnlsExpPrefix + "000", "XXXX异常", "XXXX异常");
    private String code;

    private String showmsg;

    private String errorMsg;

    ExceptionEnum(String code, String errorMsg, String showmsg) {
        this.code = code;
        this.showmsg = showmsg;
        this.errorMsg = errorMsg;
    }

    public String getCode() {
        return code;
    }

    public String getErrorMsg() {
        return errorMsg;
    }

    public String getShowMsg() {
        return showmsg;
    }

    public static final Map<String, ExceptionEnum> exceptionEnumMap = new HashMap<String, ExceptionEnum>();

    static {
        if (ExceptionEnum.values() != null && ExceptionEnum.values().length > 0) {
            for (ExceptionEnum e : ExceptionEnum.values()) {
                exceptionEnumMap.put(e.getCode(), e);
            }
        }
    }

}
